# 外部循环，i 从 1 到 9（不包含 10）
for i in range(1, 10):
    # 内部循环，j 从 1 到 9（不包含 10），注释中的范围写成了 [1, 9]，这是正确的
    for j in range(1, 10):  # j ∈ [1, 9]
        # 判断条件，如果 j 小于等于 i，则执行下面的打印语句
        if j <= i:  # j <= i, i ∈ [1, 9]
            # 使用 format 格式化字符串，打印乘法公式和结果，end='' 表示不换行
            print("{}*{}={} ".format(j, i, i * j), end='')
            # 当内部循环结束后，换行
    print()

# 第二个外部循环，i 从 1 到 9（不包含 10）
for i in range(1, 10):
    # 内部循环，j 从 1 到 i（包含 i），因为 range(1, i+1) 会生成 [1, 2, ..., i] 的序列
    # 这里不需要显式写出 j ∈ [1, i]，因为 range 函数已经隐含了这个条件
    for j in range(1, i + 1):  # range里面隐含条件
        # 同上，打印乘法公式和结果，不换行
        print("{}*{}={} ".format(j, i, i * j), end='')
        # 当内部循环结束后，换行
    print()

for i in range(1, 10):  # 外部循环，i 从 1 到 9
    for j in range(1, i + 1):  # 内部循环，j 从 1 到 i
        # 使用 format 格式化字符串，打印乘法公式和结果
        # "{}*{}={:<{}}" 中，{:<{}} 表示左对齐，并指定字段宽度
        # 宽度由后面的三元表达式决定：2 if j<2 else 3
        # 如果 j 小于 2（即 j 为 1），则宽度为 2，否则宽度为 3
        print("{}*{}={:<{}}".format(j, i, i * j, 2 if j == 1 else 3),
            end='' if j != i else '\n')  # 结尾不换行，除非 j 等于 i（即内层循环结束）